home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Parts.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  1KB  |  79 lines

  1. #include "stdafx.h"
  2.  
  3. cParts *parts = 0;
  4.  
  5. void cParts::make(int x, int y, int n)
  6. {
  7.     ASSERT(!parts_list.is_empty());
  8.  
  9.     if (!low_detail_level)
  10.         for (; n > 0; n--)
  11.         {
  12.             int rx = pmrnd(20), ry = pmrnd(20);
  13.             
  14.             new cParts(x + rx, y + ry, rnd(300), angle(rx, ry), parts_list.get_random());
  15.         }
  16. }
  17.  
  18. cParts::cParts(int _x, int _y, int v, fix angle, cProperties *_orig)
  19.         : cGameObject(_orig)
  20.     // Set animation sequence
  21.  
  22.     set_sequence("MOVING", orig->params->get_bool("*LOOP_ANIMATION", TRUE));
  23.     
  24.     // Set position
  25.     
  26.     set_position(_x, _y);
  27.     set_angular_speed(v, angle);
  28.     
  29.     // Put in list
  30.     
  31.     add_end((cList **)&parts);
  32.     
  33.     // Get scale
  34.  
  35.     max_scale = orig->params->get_fix("*MAX_SCALE", 0) * rnd(1000) / 1000;
  36.     delta_scale = max_scale;
  37.     scale_direction = 1;
  38. }
  39.  
  40. cParts::~cParts()
  41. {
  42. }
  43.  
  44. int cParts::control()
  45. {
  46.     // Make trail
  47.  
  48.     make_trail();
  49.  
  50.     // Set scale
  51.  
  52.     fix new_scale = get_scale() + scale_direction * delta_scale * size_timer.delta();
  53.     
  54.     if (new_scale > max_scale + (fix)1) 
  55.     {
  56.         new_scale = max_scale + (fix)1;
  57.         scale_direction = -1;
  58.     }
  59.  
  60.     else if (new_scale < (fix)1)
  61.     {
  62.         new_scale = 1;
  63.         scale_direction = 0;
  64.     }
  65.  
  66.     set_scale(new_scale);
  67.  
  68.     // Move
  69.     
  70.     cGameObject::control();
  71.     
  72.     bounce_on_boundaries();
  73.     
  74.     // Check if we were hit or when we go off screen
  75.     
  76.     return !animation_done() && !in_water();
  77. }
  78.